extends Node
class_name 基础树状态机类

var 当前状态 : 基础树状态类
var 运行中:bool=false

func _physics_process(delta):
	if 运行中:
		当前状态.物理刷新(delta)	

func _process(delta):
	if 运行中:
		当前状态.刷新(delta)

# 启动状态机
func 启动(初始状态:String) -> void:
	assert(has_node(初始状态), "初始状态不能为空")
	运行中=true
	当前状态 = get_node(初始状态)
	当前状态.进入()
	
# 停止状态机
func 停止() -> void:
	运行中=false

# 切换状态
func 切换状态(状态名 : String) -> void:
	if not has_node(状态名):
		return
			
	当前状态.离开()
	当前状态 = get_node(状态名)
	当前状态.进入()

func on_input(event: InputEvent):
	if 当前状态:
		当前状态.on_input(event)

func on_gui_input(event: InputEvent):
	if 当前状态:
		当前状态.on_gui_input(event)

func on_mouse_entered():
	if 当前状态:
		当前状态.on_mouse_entered()

func on_drag_data():
	if 当前状态:
		当前状态.on_drag_data()	

func on_mouse_exited():
	if 当前状态:
		当前状态.on_mouse_exited()
